package com.hzdesk.media.koreabatchmatvector.dao;

import android.content.Context;
import android.util.Log;


import com.hzdesk.media.koreabatchmatvector.bean.VideoFile;
import com.hzdesk.media.koreabatchmatvector.bean.VideoFileDao;
import com.hzdesk.media.koreabatchmatvector.bean.XmlUserBean;
import com.hzdesk.media.koreabatchmatvector.utils.FileUtil;

import java.util.ArrayList;
import java.util.List;


/**
 * Created by Administrator on 2018/5/23.
 */

public class VideoFileDaoUtils {
    private static final String TAG = VideoFileDaoUtils.class.getSimpleName();
    private DaoManager daoManager;

    public VideoFileDaoUtils(Context context) {
        daoManager = DaoManager.getInstance();
        daoManager.init(context);
    }

    /**
     * 插入数据，如果表未创建，先创建VideoFile表
     *
     * @param videoFile
     * @return
     */
    public boolean insertVideoFile(VideoFile videoFile) {
        boolean flag = false;
        try {
            flag = daoManager.getDaoSession().getVideoFileDao().insert(videoFile) == -1 ? false : true;
            flag = true;
        } catch (Exception e) {
            Log.e(TAG, "queryCreate: 插入该数据 " + e);
        }
        return flag;
    }

    /**
     * 插入多条数据，在子线程中操作
     *
     * @param list
     * @return
     */
    public boolean insertMultVideoFile(final List<VideoFile> list) {
        final boolean[] flag = {false};
        daoManager.getDaoSession().runInTx(new Runnable() {
            @Override
            public void run() {
                for (VideoFile videoFile : list) {
                    daoManager.getDaoSession().getVideoFileDao().insertOrReplace(videoFile);
                }
                flag[0] = true;
            }
        });

        return flag[0];
    }

    /**
     * 修改一条数据
     *
     * @param videoFile
     * @return
     */
    public boolean updateVideoFile(VideoFile videoFile) {
        boolean flag = false;
        try {
            daoManager.getDaoSession().getVideoFileDao().update(videoFile);
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 删除单条数据
     *
     * @param videoFile
     * @return
     */
    public boolean deleteVideoFil(VideoFile videoFile) {
        boolean flag = false;
        try {
            FileUtil.deleteFile(videoFile.getPath());
            daoManager.getDaoSession().getVideoFileDao().delete(videoFile);
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;

    }

    /**
     * 删除所有记录
     *
     * @return
     */
    public boolean deleteVideoFileAlll() {
        boolean flag = false;
        try {
            daoManager.getDaoSession().deleteAll(VideoFile.class);
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return flag;
    }

    /**
     * 查询所有记录
     *
     * @return
     */
    public List<VideoFile> queryAllVideoFile() {
        return daoManager.getDaoSession().loadAll(VideoFile.class);
    }

    /**
     * 根据主键查询记录
     *
     * @param key
     * @return
     */
    public VideoFile queryVideoFileById(long key) {
        return daoManager.getDaoSession().load(VideoFile.class, key);

    }

    /**
     * 根据会议id查询
     *
     * @param uuid
     * @return
     */
    public List<VideoFile> queryVideoFileByUUID(String uuid) {
        List<VideoFile> list1 = new ArrayList<>();
        List<VideoFile> list = queryAllVideoFile();
        for (VideoFile videoFile : list) {
            if (videoFile.getMeetingGroup().equals(uuid)) {
                list1.add(videoFile);
            }
        }
        return list1;


    }

    /**
     * 清除对应id 的数据
     */
    public boolean clearId(long id) {
        boolean flag = false;
        List<VideoFile> been = queryAllVideoFile();
        for (VideoFile videoFile : been) {
            if (videoFile.getId() == id) {
                flag = deleteVideoFil(videoFile);
                return flag;
            }
        }
        return flag;
    }

    /**
     * @desc 根据id查找本地是否有该视频
     */
    public VideoFile queryLocalIsVideo(String id) {
        VideoFileDao dao = daoManager.getDaoSession().getVideoFileDao();
        VideoFile videoFile = dao.queryBuilder().where(VideoFileDao.Properties.File_id.eq(id)).unique();
        return videoFile;
    }

    /**
     * @dec 根据创建时间查找
     */
    public void queryCreate(String file_id, VideoFile myVideoFile) {
        VideoFileDao dao = daoManager.getDaoSession().getVideoFileDao();
        VideoFile videoFile = dao.queryBuilder().where(VideoFileDao.Properties.File_id.eq(file_id)).unique();
        if (videoFile == null) {   //数据库没有改数据 插入该数据
            insertVideoFile(myVideoFile);
        } else {//数据库有改数据 根据创建时间更新数据
            List<VideoFile> mlist = queryAllVideoFile();
            for (VideoFile file : mlist) {
                if (file_id == file.getFile_id()) {
                    // 更新数据
                    deleteVideoFil(file);
                    insertVideoFile(myVideoFile);
                }
            }
        }
    }


}
